<?php
/**
 * Created by PhpStorm.
 * User: Lin
 * Date: 2017/3/2 0002
 * Time: 下午 14:21
 */
Class Category {

    /**排布分类列表+级数
     * @param $cate 分类列表
     * @param string $html 缩进符号
     * @param int $pid  上级分类id
     * @param int $level  分类级数
     * @return array
     */
    static function unlimitedForLevel($cate,$html=' --- ',$pid=0,$level=0){
        $arr=array();
        foreach($cate as $v) {
            if($pid==$v['parent_id']){
                $v['level']=$level+1;
                $v['html']=str_repeat($html,$level);
                $arr[]=$v;
                $arr=array_merge($arr,self::unlimitedForLevel($cate,$html,$v['id'],$level+1));
            }
        }
        return $arr ;
    }

    /**组合下拉式 缩进分类列表
     * @param $cate  分类列表
     * @param string $selected  选中分类
     * @return string
     */
    static function formatCateLevel($cate,$selected=''){
        $select='';
        $cate=self::unlimitedForLevel($cate);
        foreach($cate as $v){
            $select .= '<option value="' . $v['id'] . '" ';
            $select .= ($selected == $v['id']) ? "selected='ture'" : '';
            $select .= '>';
            if ($v['level'] > 1)
            {
                $select .= str_repeat('&nbsp;', ($v['level']-1) * 4);
            }
            $select .= htmlspecialchars(addslashes($v['cate_name']), ENT_QUOTES) . '</option>';
        }
        return $select;
    }

    /**查询指定分类下的所有分类  按子分类组合分类
     * @param $cate 分类
     * @param string $name
     * @param int $pid
     * @return array
     */
    static public function unlimitedForLayer($cate,$name='child',$pid=0){
        $arr=array();
        foreach($cate as $v){
            if($pid==$v['parent_id']){
                $v[$name]=self::unlimitedForLayer($cate,$name,$v['id']);
                $arr[]=$v;
            }
        }
        return $arr;
    }

    /**按分类id查找子分类
     * @param string $pid 上级id
     * @return mixed
     */
    static function findChildCate($id='0'){
        $db=M('cate');
        $where=array(
            'is_show'=>1,
            'is_nav'=>1,
            'parent_id'=>$id
        );
        $field=array('id','cate_name');
        $result=$db->field($field)->where($where)->order('sort DESC')->select();
        return $result;
    }

    /**按分类id查询所有子分类id
     * @param $cate 分类列表
     * @param int $pid  分类id
     * @return array
     */
    static function findCatesByCate($cate,$id=0,$first=ture){
        $arr=array();
        foreach($cate as $v) {
            if($id==$v['parent_id']){
                $arr[]=$v['id'];
                $arr=array_merge($arr,self::findCatesByCate($cate,$v['id'],false));
            }
        }
        if($first){
            $arr[]=$id;
        }
        return $arr ;
    }

    /**根据分类id查询所有父级分类
     * @param $cate 分类列表
     * @param $id 分类id
     * @return array
     */
    static function findParentsCate($cate,$id){
        $arr=array();
        foreach($cate as $v){
            if($v['id']==$id){
                $arr[]=$v;
                $arr=array_merge(self::findParentsCate($cate,$v['parent_id']),$arr);
            }
        }
        return $arr;
    }
}